package com.app.framework.utils;

import com.baomidou.mybatisplus.core.toolkit.IdWorker;
import jakarta.annotation.Resource;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * String工具类
 */
@Component
public class StringsUtils {

    /**
     * Spring应用上下文对象(用于访问Spring容器中的Bean)
     */
    private static ApplicationContext applicationContext;

    /**
     * 通@Resource注解将Spring应用上下文对象注入到当前类中
     *
     * @param context Spring 应用上下文对象
     */
    @Resource
    public void setApplicationContext(ApplicationContext context) throws BeansException {
        applicationContext = context;
    }

    /**
     * 根据Bean的名称和类型从Spring容器中获取Bean对象
     *
     * @param beanName Bean 的名称
     * @param beanType Bean 的类型
     */
    public static <T> T getBean(String beanName, Class<T> beanType) {
        return applicationContext.getBean(beanName, beanType);
    }

    /**
     * ID集合去重
     *
     * @param ids ID集合
     */
    public static List<Long> deduplication(List<Long> ids) {
        //使用Set去除重复
        Set<Long> unique = new HashSet<>(ids);
        //将Set转回List
        return new ArrayList<>(unique);
    }

    /**
     * 生成雪花ID
     */
    public static Long generateSnowflakeId() {
        //使用MyBatis-Plus的IdWorker生成雪花ID
        return IdWorker.getId();
    }

}